﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Ext.Net;
using ENT.GP.Core.Rol;
using ENT.GP.Core.Core;
using ENT.GP.Core;
using entgp.Code;
using System.IO;
using System.Xml;
using System.Web.Caching;

namespace entgp.Usuarios
{
    public partial class Roles : PaginasUsuario
    {
        private int IdEmp
        {
            get
            {
                int idEmpresa;
                int.TryParse(Session["CodigoEmpSelect1"].ToString(), out idEmpresa);
                return (idEmpresa);

            }
            set
            {
                Session["CodigoEmpSelect1"] = value;

            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!IsPostBack)
                {
                    int idLink = 0;
                    int.TryParse(Page.Request.QueryString.Get("RG"), out idLink);
                    EmpresaLookup.InvalidateCache();
                    sEmpresas.DataSource = EmpresaLookup.GetNameValueList(this.IdEmp);
                    sEmpresas.DataBind();

                    if (idLink == 1)
                    {
                        this.wSelectEmpresa.Show();
                    }
                    else
                    {
                       
                        int.TryParse(Session["CodigoEmp"].ToString(), out  idLink);
                        this.IdEmp = idLink;
                        NewChooseEmp(false);
                    }
                    //Leer en cache tmp utilizado en edit
                    Read_TPL();
                }
            }
            catch (Exception ex)
            {
                Util.RegistarLog(ex.ToString());
            }            
        }
        //
        private void NewChooseEmp(Boolean bValue)
        {
            this.lblNewSeeK.Visible = bValue;
            this.cbxChoseeEmp.Visible = bValue;
            this.btnNuevaBusqueda.Visible = bValue;
        }
        protected void btnNewSeeK_Click(object sender, DirectEventArgs e)
        {
            try
            {
                int idEmpTmp = 0;
                int.TryParse(cbxChoseeEmp.SelectedItem.Value, out idEmpTmp);
                this.IdEmp = idEmpTmp;

                RolesLookup.InvalidateCache();

                //GridPanelUsuarios
                GridPanelRoles.Title = "Listado de Usuarios de " + cbxChoseeEmp.SelectedItem.Text;


                this.StoreRol.RemoveAll();
                this.txtNombreRol.SetValue("");
                this.txtDescripcion.SetValue("");
            }
            catch { }
        }
        /*
        protected void btnBuscar_Click(object sender, DirectEventArgs e)
        {
           
             DataBindSearch();
           
        }
        [DirectMethod]
        public void DataBindSearch()
        {
            try
            {
                RolCriterio criterio = RolCriterio.NewRolCriterioRoot();
                criterio.Descripcion = string.Format("{0}%", txtDescripcion.Text);
                criterio.Nombre = string.Format("{0}%", txtNombreRol.Text);
                criterio.IDEmpresa = this.IdEmp;
                StoreRol.DataSource = RolLista.GetRolLista(criterio);
                StoreRol.DataBind();
             }
            catch { }
        }
        */ 
         /// <summary>
        /// Invoca metodo para actualizar datos de la grid
        /// </summary>
        private static void CallRefreshGrid()
        {
            X.Js.AddScript("#{StoreRol}.load();");
        }
        protected void StoreRefresh(object sender, StoreRefreshDataEventArgs e)
        {
            string sDescrip = e.Parameters["txtDescripcion_bprm"];
            string sNombre  = e.Parameters["txtNombreRol_bprm"];
            RolCriterio criterio = RolCriterio.NewRolCriterioRoot();
            if (sDescrip.Length!=0)
                criterio.Descripcion = string.Format("{0}%", sDescrip);
            if (sNombre.Length != 0)
                criterio.Nombre = string.Format("{0}%", sNombre);
            criterio.IDEmpresa = this.IdEmp;
            StoreRol.DataSource = RolLista.GetRolLista(criterio);
            StoreRol.DataBind();
        }

        protected void btnNuevo_Click(object sender, DirectEventArgs e)
        {
            string operacion = e.ExtraParams["Operacion"];
            wucRoles1.Mostrar(operacion,0);
        }
        protected void command_Click(object sender, DirectEventArgs e)
        {
            int idRol;
            int.TryParse(e.ExtraParams["Id"], out idRol);
            hidIdRol.Text    = e.ExtraParams["Id"];

            string operacion = e.ExtraParams["Operacion"];
            switch (operacion)
            {
                 case "Eliminar":
                     X.Msg.Confirm("Aviso", "Esta seguro de eliminar el item",
                         new MessageBoxButtonsConfig
                         {
                             Yes = new MessageBoxButtonConfig
                             {
                                  
                                  Handler = "RolAjax.EliminarRol();",
                                  Text    = "Si"
                             },
                             No = new MessageBoxButtonConfig
                             {
                                 Text = "No"
                             }
                         }).Show();

                     break;
                 case "Editar":
                     wucRoles1.Mostrar(operacion, idRol);
                     break;
             }

        }
        [DirectMethod]
        public void EliminarRol()
        {
            try
            {
                int idRol;
                string ruta;
                string sSiglasEmpresa;
                int.TryParse(hidIdRol.Text, out idRol);

                var empActivar = Empresas.Get(this.IdEmp);
                sSiglasEmpresa = empActivar.Codigo;

                var rolDelete = Rol.GetRol(idRol);
                ruta = string.Format("{0}{1}/resources/arbol{2}.xml", new UtilRA().RutaArchivosEmpresaGlobal, sSiglasEmpresa, rolDelete.Codigo);
              
                rolDelete.Delete();
                rolDelete.Save();

                DeleteFile(ruta);

                ruta = string.Format("{0}{1}/resources/frontal{2}.xml", new UtilRA().RutaArchivosEmpresaGlobal, sSiglasEmpresa, rolDelete.Codigo);
                DeleteFile(ruta);

                CallRefreshGrid();
                UtilP.MostrarNotificacion("El elemento se elimino correctamente", "Aviso", MessageBox.Icon.INFO);
                //GridPanelRoles.DeleteSelected();

            }
            catch (Exception ex)
            {
                Util.RegistarLog(ex.ToString());
                UtilP.MostrarNotificacion("El elemento no se elimino", "Aviso", MessageBox.Icon.ERROR);
            }

        }

        private void DeleteFile(string ruta)
        {
            string pathDirect;
            pathDirect = Server.MapPath(ruta);
            if (File.Exists(pathDirect))
                File.Delete(pathDirect);
           
        }
      
        protected void btnSelecionar_Click(object sender, DirectEventArgs e)
        {
            try
            {
                this.IdEmp = Convert.ToInt32(cbxEmpresas.SelectedItem.Value);
                GridPanelRoles.Title = "Listado de Roles de " + cbxEmpresas.SelectedItem.Text;
                this.wSelectEmpresa.Hide();
            }
            catch (Exception ex)
            {
                e.Success = false;
                Util.RegistarLog(ex.ToString());
            }
        }
        
        //Leer Xml TPL 
        public XmlDocument Read_TPL()
        {
            XmlDocument xmlTemplateMenu = this.Page.Cache["ReadTPL"] as XmlDocument;

            if (xmlTemplateMenu == null)
            {
                string ruta = "";
                //Lectura del xml
                ruta = string.Format("{0}/resources/arbol{1}.xml", ConfigurationManager.AppSettings.Get("SD"), "TPL");
                xmlTemplateMenu = new XmlDocument();
                xmlTemplateMenu.Load(HttpContext.Current.Server.MapPath(ruta));
                Page.Cache.Add("ReadTPL", xmlTemplateMenu, null, DateTime.Now.AddHours(1), System.Web.Caching.Cache.NoSlidingExpiration, CacheItemPriority.Default, null);
            }

            return (xmlTemplateMenu);


        }

    }
}
